<?php
session_start();//开启session会话
require_once("./config.php");//引入配置文件
require_once("./PDO.php");//引入封装的PDO类
require_once("./RSA.php");//引入配置文件
$RSA=new RSA(file_get_contents('./public.txt'),file_get_contents('./private.txt'));//实例化RSA类，加载公钥和私钥文件。
$DB=new DB($dbconfig);//实例化PDO类，加载配置
$OP=$_GET['OP'];//获取前端操作
//生成token
function GetToken($Account)
{
	global $DB;//引用全局变量DB，以便在函数内部使用。
	global $RSA;//引用全局变量RSA，以便在函数内部使用。
	$Where=array('Account'=>$Account);
	$UserData=$DB->query('User','',$Where);
	$Token=date("Y-m-d H:i:s").','.$UserData['UID'].','.$UserData['Account'].','.$UserData['PassWord'].','.$UserData['UserName'].','.$UserData['Authority'];
	$_SESSION['UID']=$UserData['UID'];//将UID保存到session中，以便后续使用。
	$_SESSION['Account']=$UserData['Account'];
	$_SESSION['UserName']=$UserData['UserName'];
	$_SESSION['PassWord']=$UserData['PassWord'];
	$_SESSION['Authority']=$UserData['Authority'];
	$_SESSION['Token']=$Token;
	return $RSA->private_encrypt($Token);
}
//检查token是否合法
function CheckToken($Token) {
	$Token=explode(',',$RSA->public_decrypt(str_replace(' ','+', $Token)));//将字符串按照逗号分割成数组。
    $time=strtotime($Token[0]);
    if(time()-$time>1800)//如果当前时间减去token生成时间大于30分钟，则token过期。
	{
		return false;//返回false，表示token过期。
	}
	else if($Token[2]!=$_SESSION["Account"]&&$Token[3]!=$_SESSION['PassWord'])
		{
			return false;
		}
	return true;
}
//对输入的数据进行过滤和转义，以防止SQL注入和XSS攻击。
function DataFiltering($Value) {
	$Link=mysqli_connect('127.0.0.1','root','123456','Sagittarius');
	$Value=mysqli_real_escape_string($Link,$Value);
	mysqli_close($Link);
    $Value = htmlspecialchars($Value);
    return $Value;
}
switch ($OP) {
	//登陆 签发token
	case 'Landing':
		$Data=json_decode(file_get_contents("php://input"),true);
		$Account=DataFiltering($Data['Account']);
        $PassWord=DataFiltering($Data['PassWord']);
        $Where=array('Account'=>$Account,'PassWord'=>$PassWord);//定义查询条件，包括账号和密码。
        $UserData=$DB->query('User','',$Where);//查询用户数据。
        if($UserData!=[])//如果查询结果为空，表示账号或密码错误。
        {
			echo json_encode(GetToken($Account));
		}
		else {
			header('HTTP/1.1 401 Unauthorized');
			echo json_encode(array('Error'=>'账号或密码错误'));//返回错误信息。
		}
		break;
	case 'SignUp':
		$Data=json_decode(file_get_contents("php://input"),true);
		$Account=DataFiltering($Data['Account']);
		$PassWord=DataFiltering($Data['PassWord']);
		$Where=array('Account'=>$Account,'PassWord'=>$PassWord);
		$UserData=$DB->query('User','',$Where);
		if($UserData==[])
		{
			$DB->insert('User',$Data);
			header('HTTP/1.1 200 OK');
			echo json_encode(GetToken($Account));
		}
		else {
			echo json_encode(array('Error'=>'账号重复'));
		}
		
}
?>